Simultaneous multithreading attempts to obtain higher processor utilization by allowing instructions from more than one independent thread to coexist in a processor and compete for shared resources. Shared resources can be, e.g., a joint cache for a processor having different computing cores or better sub-cores, i.e., hardware threads. The hardware threads are distinguished from software threads that may be dispatched by a dispatcher to different available hardware threads of a processor. It is known that some processes of programs run faster whereas other processes or programs run slower in an SMT environment. In some cases, two programs running in threads on the same CPU run slower than if they were serialized, i.e., run one after the other. For example, this can be the case if both programs need the same resources of a processor being available just once. Several heuristic approaches have been attempted in order to optimize software thread performance. However, all methods tried so far have their limitations.